home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / telecomm / fido / wordlab.lha / WordLab.Spot < prev   
Encoding:
Text File  |  1994-12-05  |  6.3 KB  |  219 lines

  1. /*
  2.  
  3. 'The Word Laboratory' 1.0 by Mat Bettinson of London Xenolink Alliance.
  4.  
  5. This script NEEDS the analysis program LEX to work. Please alter the below 
  6. line to tell it where LEX is. 
  7.  
  8. Anyway else? Erm... Yeah the CPM code is a little weird... It looks for
  9. consequetive message by a single writer and if the time difference isn't
  10. ridiculous it will average it out to generate a Characters per minute
  11. figure. Hardly infalible but it seems to work... 
  12.  
  13. Stipping should remove a lot of bogus characters but UUencodes will give
  14. stupid results obviously... Don't know how to really check for that
  15. without making slower that this script already is. 
  16.  
  17. Enjoy... The results are... Interesting... 
  18.  
  19. BTW this is Net/E-Mail ware. Send me a message if you dig it. 
  20.  
  21. Mat Bettinson Fido 2:254/205 E-Mail mat@darkside.demon.co.uk
  22.  
  23. */
  24.  
  25. LEX_path = 'utils:'
  26.  
  27. address 'SPOT'
  28. signal on syntax
  29. options results
  30. NUMERIC DIGITS 5
  31.  
  32. VER = "1.0"
  33. cr = '0d'X
  34. temp_file = 'T:MatStat.temp'
  35. temp_dir = 'T:'
  36. numsys=0
  37.  
  38. 'isarealist'
  39. IF rc = 0 then DO
  40.  'requestarea TITLE "Area to Analyse?" USERNAME'
  41.  if result=5 then EXIT
  42.  area = result
  43.  'gotoarea 'area
  44.  END
  45. ELSE do
  46.  'getareaname'
  47.  area=result
  48.  END
  49.  
  50. /* 'lockgui' */
  51. 'gotomessage 1'
  52. 'getnummsgs'
  53. TotalMessages=result
  54. IF TotalMessages = 0 THEN signal exit
  55. prognum=result
  56. 'getusername'
  57. Postername=result
  58.  
  59. 'progressopen TITLE "Sampling data..."'
  60. pro=result
  61.  
  62. DO i = 1 to TotalMessages
  63.  IF rc = 5 THEN signal exit
  64.  'messages'
  65.  'gotomessage 'i
  66.  'getfrom'
  67.  Fadd=result
  68.  'gettimewritten'
  69.  TimeWr=result
  70.  'saveascii 'temp_file' OVERWRITE noheader nokludges notearline noorigin'
  71.  Call compile
  72.  'progressupdate 'pro' 'i' 'TotalMessages
  73.  if rc=5 then signal exit
  74.  END
  75. 'progressclose 'pro
  76. 'progressopen TITLE "Analysing data..."'
  77. Score = 0
  78. Do i = 1 to Numsys
  79.  If TotalBytes.i ~= 0 & TotalTime.i ~= 0 then DO
  80.   CPM = Trunc((TotalBytes.i/TotalTime.i)*60)
  81.   Score.i = CPM
  82.   END
  83.  ELSE Score.i = '-'
  84.  END
  85. Do i = 1 to NumSYS
  86.  nc = compress(temp_dir||name.i'.txt')
  87.  Address COMMAND Lex_path'LEX 'nc' >T:temp'
  88.  Address COMMAND 'Delete >NIL: 'nc
  89.  Call Open(lex,'T:temp','R')
  90.   Do until EOF(lex) 
  91.    line = READLN(lex)
  92.    If left(line,4) = 'Avg.' then AvSyLen.i = strip(word(line,4))
  93.    If left(line,19) = 'Number of sentences' then WdsPSent.i = strip(word(line,7))
  94.    If left(line,11) = 'Gunning-Fog' then GunFog.i = strip(word(line,3))
  95.    If left(line,6) = 'Flesch' then DO 
  96.     FleschInd.i = strip(translate((word(line,3)),'',',')) ; FleschGrd.i = strip(word(line,7)) ; END
  97.    If left(line,7) = 'Kincaid' then Kincaid.i = strip(word(line,3))
  98.   END
  99.   Call close(lex)
  100.   Address 'SPOT' 
  101.   'progressupdate 'pro' 'i' 'NumSYS
  102.   if rc = 5 then signal exit
  103.  END
  104. 'progressclose 'pro
  105. Area = Centre(Area,14)
  106. When = Centre(Date(),11)
  107. day = Centre(date('W'),11)
  108.  
  109.  
  110. Call Open(out,temp_file,'w')
  111. Call WriteLN(out,'')
  112. Call WriteLN(out,' +-----------___-------------------------------------------------------------+')
  113. Call WriteLN(out,' |'day' | |_  _  |  | _  _ _|  |   _ |_  _  _ _ |_ _  _    Analysing:  |')
  114. Call WriteLN(out," |"When" | | )(-  |/\|(_)| (_|  |__(_||_)(_)| (_||_(_)| \/"area"|") 
  115. Call WriteLN(out,' +-----------------------------------------------------------/---------------+')
  116. Call WriteLN(out,' |    Writer      | BPM | Wd Len | Wd p Sen | Gun Fog | IND-Fles-GRD |Kincaid|')
  117. Call WriteLN(out,' +----------------|-----|--------|----------|---------|--------------|-------+')
  118.  
  119. Do p = 1 to NumSYS
  120.  Writer = left(Name.p,16)
  121.  BPM = centre(Score.p,5)
  122.  WdLen = centre(AvSyLen.p,8)
  123.  WdpSen = centre(WdsPSent.p,10)
  124.  GunFog = centre(GunFog.p,9)
  125.  FleschInd = centre(FleschInd.p,4)
  126.  FleschGrd = centre(FleschGrd.p,4)
  127.  Kincaid = centre(Kincaid.p,7)
  128.  
  129.  Outline = ' |'Writer'|'BPM'|'WdLen'|'Wdpsen'|'GunFog'|'  FleschInd'    'FleschGrd '|'Kincaid'|'
  130.  
  131.  Call WriteLN(out,Outline)
  132.  END
  133.  
  134. Call WriteLN(out,' +---------------------------------------------------------------------------+')
  135. Call WriteLN(out,'')
  136. Call WriteLN(out,'_KEY_             _Description_')
  137. Call WriteLN(out,'BPM           - Bytes Per Minute (Not always possible to calculate).')
  138. Call WriteLN(out,'Wd Len        - Average Word Length (in sylables) used by the writer.')
  139. Call WriteLN(out,'Wd p Sen      - Aeverage Words per Sentence used by the writer.')
  140. Call WriteLN(out,'Gun Fog       - Gunning Fog-Index: number equals the approximate level of')
  141. Call WriteLN(out,'                schooling (in years) needed to understand text by the writer.')
  142. Call WriteLN(out,'IND-Fles-GRD  - IND : Flesch Index. Inversely preportional to difficulty.')
  143. Call WriteLN(out,'              - GRD : Flesch Grade. Similar to Gunning-Fog in interpretation.')
  144. Call WriteLN(out,'Kincaid       - Kindcaid Index: Similar to Flesch Grade and Gunning-Fog.')
  145.  
  146. Call WriteLN(out,'')
  147. Call WriteLN(out,'The more the figures for different algorythms match, the more likely the')
  148. Call WriteLN(out,'result is accurate for the sample. All the writers text is used for analysis.')
  149. Call WriteLN(out,'')
  150. Call WriteLN(out,"All analysis bar BPM is produced using 'LEX' by Jeff Sullivan.")
  151. Call WriteLN(out,"'The Word Laboratory' written by Mat Bettinson Monday 05-Dec-94")
  152. Call WriteLN(out,'                                 mat@darkside.demon.co.uk Fidonet: 2:254/205')
  153.  
  154. Call Close(out)
  155. 'WRITE TO "ALL" FROM "'postername'" SUBJECT "Word-Lab Analysis" FILE "'temp_file'" NOEDIT NOGUI'
  156.  
  157. Signal EXIT
  158.  
  159. compile:
  160. Call findsys
  161. temp=translate(TimeWr," ",":")
  162. Time=(word(temp,1)*3600) + (word(temp,2)*60) + word(temp,3)
  163. Call msganalyse
  164. If LA=Fadd then DO
  165.  ETime = Time - LastTime
  166.  IF (Etime < 3000) & (Time > LastTime) then DO
  167.   TotalTime.h = TotalTime.h + ETime
  168.   TotalBytes.h = TotalBytes.h + bulk
  169.   END
  170.  LastTime = time
  171.  END
  172. ELSE DO
  173.  LA = Fadd
  174.  LastTime = Time
  175.  END
  176.  
  177. RETURN
  178.  
  179. findsys:
  180. Do h = 1 to numsys
  181.  If Name.h = Fadd then RETURN
  182.  END
  183. Numsys = numsys + 1
  184. h = Numsys
  185. Name.h = Fadd
  186. TotalTime.h = 0
  187. TotalBytes.h = 0
  188. RETURN
  189.  
  190. msganalyse:
  191. Call Open(anly,temp_file,'R')
  192. fn = compress(temp_dir||Name.h'.txt')
  193. If Exists(fn) then Call Open(usr,fn,'A')
  194. ELSE Call Open(usr,fn,'W')
  195. bulk = 0
  196. Do until EOF(anly)
  197.  line = READLN(anly)
  198.  If left(line,3) = '...' then break
  199.  if Index(left(line,5),'>') = 0 then DO
  200.    bulk = bulk + length(line)
  201.    wtout = Compress(line,'_-\"0123456789£$%^&*;:<>()=+')
  202.    Call WriteLN(usr,wtout)
  203.    END
  204.  END
  205. Call Close(anly)
  206. Call Close(usr)
  207. RETURN
  208.  
  209. syntax:
  210. say rc errortext(rc) 'in line' SIGL
  211. failure:
  212. exit:
  213. 'unlockgui'
  214. IF pro ~= 'PRO' THEN
  215.     'progressclose' pro
  216. 'messages'
  217. 'lastmessage'
  218. exit
  219.